﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sispe.Entities;
using System.Data;

namespace Sispe.Repository
{
    public class LiquidacionRepository:MasterRepository, ILiquidacionRepository
    {
        public List<LIQUIDACION> GetAllFromLiquidacion()
        {
            var query = from p in context.LIQUIDACIONs
                        .Include("CONTRATO.TRABAJADOR.PERSONA")
                        .Include("AREA_LIQUIDACION")
                        select p;

            return query.ToList();
        }

        public List<LIQUIDACION> GetAllFromLiquidacionByTrabajador(string descripcion)
        {
            if (descripcion != string.Empty)
            {
                var query = from p in context.LIQUIDACIONs.Include("CONTRATO.TRABAJADOR.PERSONA")
                        .Include("AREA_LIQUIDACION")
                            where p.CONTRATO.TRABAJADOR.PERSONA.NombreCompleto.ToUpper().Contains(descripcion.ToUpper())
                            select p;

                return query.ToList();

            }
            else
            {
                var query = from p in context.LIQUIDACIONs
                            select p;

                return query.ToList();
            }
        }

        public LIQUIDACION GetFromLiquidacionById(int id)
        {
            var query = from p in context.LIQUIDACIONs
                        where p.IdLiquidacion.Equals(id)
                        select p;

            return query.SingleOrDefault();
        }

        public void AddLiquidacion(LIQUIDACION liquidacion)
        {
            //context.Entry(liquidacion.CONTRATO).State = EntityState.Unchanged;
            //context.Entry(liquidacion.AREA_LIQUIDACION).State = EntityState.Unchanged;
            //////liquidacion.AREA_LIQUIDACION = null;
            liquidacion.CONTRATO = null;

            context.LIQUIDACIONs.Add(liquidacion);
            context.SaveChanges();
        }

        public void UpdateLiquidacion(LIQUIDACION liquidacion)
        {
            //////liquidacion.AREA_LIQUIDACION = null;
            liquidacion.CONTRATO = null;

            context.Entry(liquidacion).State = System.Data.EntityState.Modified;
            context.SaveChanges();
        }

        public void DeleteLiquidacion(int id)
        {
            var existe = context.LIQUIDACIONs.Where(p => p.IdLiquidacion.Equals(id)).SingleOrDefault();

            if (existe != null)
            {
                context.LIQUIDACIONs.Remove(existe);
                context.SaveChanges();
            }
        }


        public bool ExisteDuplicidad(string descripcion, int id)
        {
            var query = from p in context.LIQUIDACIONs
                        where p.CONTRATO.TRABAJADOR.PERSONA.NombreCompleto.ToUpper().CompareTo(descripcion.ToUpper()) == 0
                        && p.IdLiquidacion != id
                        select p;

            return query.Any();
        }


        public LIQUIDACION GetFromLiquidacionByNumeroContrato(int id)
        {
            var query = from p in context.LIQUIDACIONs
                        where p.CONTRATO.IdContrato.Equals(id)
                        select p;

            return query.SingleOrDefault();
        }
    }
}
